﻿using System;
using System.ComponentModel.DataAnnotations;
using System.Text;
using LAPI.Core;

namespace LAPI.Data.Model
{
    /// <summary>
    /// Modelo de la tabla 'Deportespista'
    /// </summary>
    public class DeportePista
    {
        #region Model
        //PK
        [DataType(DataType.Text)]
        [Display(Name = "#")]
        public int idDeportePista { get; set; }
        //FK
        public int idPista { get; set; }
        public String pista { get; set; }
        public Boolean luz { get; set; }
        public int idDeporte { get; set; }
        [Required]
        [DataType(DataType.Text)]
        [Display(Name = "Deporte:")]
        [FieldValue("Deporte")]
        public String deporte { get; set; }

        public Boolean activo { get; set; }

        [Required]
        [DataType(DataType.Text)]
        [Display(Name = "Precio por hora:")]
        [FieldValue("Precio por hora")]
        public Double precio { get; set; }

        [Required]
        [DataType(DataType.Text)]
        [Display(Name = "Suplemento por uso luz artificial:")]
        [FieldValue("Suplemento por uso luz artificial")]
        public Double suplementoLuz { get; set; }        

        #endregion 

        #region Data Helper
        public const String Table = "DEPORTESPISTA";
        public const String Tables = "DEPORTESPISTA,PISTA,DEPORTES,CENTRODEPORTIVO";
        public const String Columns = "ID_DEPORTESPISTA, deportespista.id_pista, deportespista.id_deportes, precio, suplementoluz, DEPORTESPISTA.activo, pista.descripcion descPista, deportes.descripcion descDeporte, pista.luz";
        #endregion

        #region Insert Helper

        /// <summary>
        /// Crea la cadena con todas las columnas necesarias en una sentencia insert.
        /// </summary>
        /// <returns>String con la cadena</returns>
        public String ToInsertColumns()
        {
            return "id_pista, id_deportes, precio, suplementoluz, activo";
        }

        /// <summary>
        /// Crea una cadena con todos los valores a insertar en una sentencia insert.
        /// </summary>
        /// <returns>String con la cadena</returns>
        public String ToInsertValues()
        {
            StringBuilder sentence = new StringBuilder();
            sentence.Append("");
            sentence.Append(this.idPista);
            sentence.Append(",");
            sentence.Append(this.idDeporte);
            sentence.Append(",");
            sentence.Append(this.precio.ToString().Replace(',','.'));
            sentence.Append(",");
            sentence.Append(this.suplementoLuz.ToString().Replace(',', '.'));
            sentence.Append(",1"); //activo
            return sentence.ToString();
        }
        #endregion

        #region Update Helper 

        /// <summary>
        /// Crea la cadena 'SET x1=y1, x2=y2' de una sentencia update.
        /// <p>Actualiza los siguientes datos del modelo:</p>
        /// <ul>
        /// <li>Precio</li>
        /// <li>Suplemento de luz(si tiene luz la pista)</li>
        /// </ul>
        /// </summary>
        /// <returns>String con la cadena</returns>
        public String ToUpdate()
        {
            StringBuilder sentence = new StringBuilder();
            sentence.Append("precio = ");
            sentence.Append(this.precio.ToString().Replace(',', '.'));
            sentence.Append(", suplementoluz = ");
            sentence.Append(luz ? this.suplementoLuz.ToString().Replace(',', '.') : "0");

            return sentence.ToString();
        }

        /// <summary>
        /// Crea la cadena 'SET x1=y1, x2=y2' de una sentencia update.
        /// <p>Actualiza los siguientes datos del modelo:</p>
        /// <ul>
        /// <li>Activo</li>
        /// </ul>
        /// </summary>
        /// <returns>String con la cadena</returns>
        public String ToUpdateEstado()
        {
            StringBuilder sentence = new StringBuilder();
            sentence.Append("Activo = '");
            sentence.Append(this.activo ? 1 : 0);
            sentence.Append("'");

            return sentence.ToString();
        }
        #endregion

        /// <summary>
        /// Método para convertir un Dataset en el modelo.
        /// </summary>
        /// <param name="response">Dataset obtenido en una consulta</param>
        /// <returns>Colección con los modelos obtenidos en la conversión</returns>
        public static System.Collections.Generic.List<LAPI.Data.Model.DeportePista> toModel(System.Data.DataSet response)
        {
            System.Collections.Generic.List<LAPI.Data.Model.DeportePista> result = new System.Collections.Generic.List<Data.Model.DeportePista>();

            foreach (System.Data.DataRow item in response.Tables[0].Rows)
            {
                LAPI.Data.Model.DeportePista model = new Data.Model.DeportePista();

                model.idDeportePista = Convert.ToInt32(item["id_deportesPista"].ToString());

                model.idPista = Convert.ToInt32(item["id_pista"].ToString());
                model.pista = item["descPista"].ToString();
                model.idDeporte = Convert.ToInt32(item["id_deportes"].ToString());
                model.deporte = item["descDeporte"].ToString();

                model.luz = Convert.ToBoolean(item["luz"].ToString());
                model.activo = Convert.ToBoolean(item["activo"].ToString());

                model.precio = Convert.ToDouble(item["precio"].ToString());
                model.suplementoLuz = Convert.ToDouble(item["suplementoluz"].ToString());

                result.Add(model);
            }

            return result;
        }

        public override String ToString()
        {
            return "[DeportePista]{idDeportePista:" + idDeportePista +
                ",idPista:" + idPista +
                ",idDeporte:" + idDeporte +
                ",precio:" + precio +
                ",suplementoLuz:" + suplementoLuz +
                "}";
        }
    }
}
